Java Technologies instanceof এবং Generic Type Checking গাইড ও নোট

280

জাভায় instanceof অপারেটর সাধারণত একটি অবজেক্ট নির্দিষ্ট টাইপের কিনা তা পরীক্ষা করতে ব্যবহৃত হয়। তবে, জেনেরিক্স ব্যবহার করার সময় Type Erasure-এর কারণে কিছু সীমাবদ্ধতা থাকে। এই প্রবন্ধে আমরা instanceof অপারেটর এবং Generic Type Checking এর কার্যপদ্ধতি ব্যাখ্যা করব।


Type Erasure এবং Generic Type Checking

জেনেরিক্স জাভার কম্পাইল-টাইমে কাজ করে, কিন্তু Runtime-এ জাভার টাইপ প্যারামিটার সম্পর্কিত তথ্য মুছে (erase) ফেলে। এর ফলে:

  1. Runtime-এ জেনেরিক টাইপ সম্পর্কে সরাসরি জানা যায় না।
  2. instanceof দিয়ে সরাসরি জেনেরিক টাইপ পরীক্ষা করা যায় না।

উদাহরণ:

List<String> stringList = new ArrayList<>();
if (stringList instanceof List<String>) { // Compile-time Error
    System.out.println("This is a List of Strings");
}

উপরের কোডটি Compile-time Error দেবে কারণ List<String> টাইপটি Runtime-এ উপলব্ধ নয়।


Type Checking এর সমাধান

১. Raw Type ব্যবহার করে instanceof পরীক্ষা

Runtime-এ জেনেরিক টাইপের পরিবর্তে raw type ব্যবহার করা যায়।

import java.util.List;
import java.util.ArrayList;

public class InstanceOfExample {
    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>();

        if (stringList instanceof List) { // Checks against raw type
            System.out.println("This is a List");
        }
    }
}

আউটপুট:

This is a List

দ্রষ্টব্য: এটি কাজ করে, কিন্তু টাইপের বিশুদ্ধতা নিশ্চিত করতে পারে না। এটি শুধু যাচাই করে যে এটি একটি List কিনা।


২. ক্লাস টোকেন (Class<T>) দিয়ে টাইপ পরীক্ষা করা

Class অবজেক্ট ব্যবহার করে নির্দিষ্ট টাইপ চেক করা যায়। এটি সাধারণত জেনেরিক মেথড বা ক্লাসে ব্যবহৃত হয়।

import java.util.List;
import java.util.ArrayList;

public class TypeCheckWithClass {
    public static <T> boolean isInstanceOfType(Object obj, Class<T> clazz) {
        return clazz.isInstance(obj);
    }

    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>();

        System.out.println(isInstanceOfType(stringList, List.class)); // true
        System.out.println(isInstanceOfType(stringList, ArrayList.class)); // true
    }
}

আউটপুট:

true
true

Wildcard ব্যবহার করে Generic Type Checking

Wildcard (<?>) ব্যবহার করে জেনেরিক টাইপ চেক করা যায়, তবে এটি Runtime-এ নির্দিষ্ট টাইপ চেক নিশ্চিত করে না।

import java.util.ArrayList;
import java.util.List;

public class WildcardInstanceCheck {
    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>();
        List<Integer> intList = new ArrayList<>();

        if (stringList instanceof List<?>) { // Valid
            System.out.println("stringList is an instance of List<?>");
        }

        if (intList instanceof List<?>) { // Valid
            System.out.println("intList is an instance of List<?>");
        }
    }
}

আউটপুট:

stringList is an instance of List<?>
intList is an instance of List<?>

Generic Type Checking ইন্টারফেস বা মেথডে

উদাহরণ ১: টাইপ টেস্টিং মেথড

import java.util.List;

public class GenericTypeChecker {
    public static <T> boolean checkType(Object obj, Class<T> type) {
        return type.isInstance(obj);
    }

    public static void main(String[] args) {
        List<String> stringList = List.of("A", "B", "C");

        System.out.println(checkType(stringList, List.class)); // true
        System.out.println(checkType("Test", String.class));  // true
        System.out.println(checkType(123, String.class));     // false
    }
}

আউটপুট:

true
true
false

সীমাবদ্ধতা এবং পরামর্শ

  1. Type Erasure-এর কারণে সরাসরি Generic Type চেক করা যায় না।
    • <T> Runtime-এ কনভার্ট হয়ে raw type-এ পরিণত হয়।
  2. instanceof raw type-এ কাজ করে, কিন্তু নির্দিষ্ট টাইপ পরীক্ষা করতে পারে না।
  3. Type Token বা Class Object ব্যবহার করা জেনেরিক টাইপ চেকের সবচেয়ে কার্যকর উপায়।
  4. Wildcard (<?>) নির্দিষ্ট টাইপ না জানিয়ে Generic Collection চেক করতে ব্যবহার করা যেতে পারে।

জাভার জেনেরিক্সে instanceof এর সীমাবদ্ধতাগুলো Type Erasure-এর কারণে হয়। নির্দিষ্ট টাইপ চেক করার জন্য Class Object বা Wildcards ব্যবহার করা উত্তম পদ্ধতি। এটি টাইপ সেফ কোড নিশ্চিত করার পাশাপাশি Runtime-এ টাইপ মিসম্যাচের ঝুঁকি হ্রাস করে।

Content added By
Promotion

Are you sure to start over?

Loading...